/*
 * @lc app=leetcode.cn id=88 lang=typescript
 *
 * [88] 合并两个有序数组
 */

// @lc code=start
/**
 Do not return anything, modify nums1 in-place instead.
 */

// 复制多一份的做法
// function merge(nums1: number[], m: number, nums2: number[], n: number): void {
//     if (m == 0) nums1.push(...nums2);
//     if (n == 0) return;

//     let i = 0;
//     let j = 0;
//     let result: number[] = [];
//     while (i < m) {
//         const a1 = nums1[i];
//         const a2 = nums2[j];

//         if (a2 === undefined || a1 <= a2) {
//             result.push(a1);
//             i++;
//         } else {
//             result.push(a2);
//             j++;
//         }
//     }
//     nums1.length = 0;
//     if (j < n) {
//         nums1.push(...result, ...nums2.slice(j));
//     } else {
//         nums1.push(...result);
//     }
// }

// 后序处理
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
    let i = m - 1;
    let j = n - 1;
    let k = m + n - 1;
    while (i >= 0 || j >= 0) {
        const a1 = nums1[i];
        const a2 = nums2[j];
        if (a2 === undefined || a1 > a2) {
            nums1[k] = a1;
            i--;
        } else {
            nums1[k] = a2;
            j--;
        }
        k--;
    }
}

// @lc code=end
